Amazon Bedrock Marketplace でモデルをデプロイしてみた
こんにちは!AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。
Amazon Bedrock Maketplace が re:Invent 2024 で登場しました。
当時、モデルをデプロイするところで Service Quotas に引っかかってたため、デプロイしてみたブログになります。
Amazon Bedrock Maketplace 使ってみたい!という方は、このブログを読む前に申請あげておくことをオススメします。
Amazon Bedrock Marketeplace
説明が先ほどのブログと重複しますが、大事なことなのでもう 1 回。
Amazon Bedrock Marketplace は従来提供されていた Anthropic, Cohere, Meta などの主要ベンダーに加えて、 Bedrock 上で 3rd Party のモデルを利用できる機能です。対象のモデルをサブスクライブ、デプロイすることで、Bedrock の推論 API を SageMaker エンドポイント経由で実行できるようになります。
デプロイしたモデルが Converse API と互換性があるモデルの場合は、Amazon Bedrock Agents、Amazon Bedrock Knowledge Bases などの周辺機能と統合できる部分もポイントです。
Bring your own endpoint
今回の Amazon Bedrock Marketeplace は Marketplace deployments を利用してモデルのデプロイを行います。
この deployments なのですが、SageMaker JumpStart 経由でデプロイしたモデルも登録可能なようです。
やってみる
モデルのクォーター申請が完了している前提でコンソールからデプロイを行います。
モデルサブスクライブ
まずは 3rd Patry 製品を利用するため、サブスクライブから始まります。
この際、契約を組み交わすことになるのですが、商用のモデルの場合は**モデルを動かすインスタンスの料金に加えて、**ライセンス費用が発生します。モデルを動かすインスタンスの料金が別途発生するため、ご注意ください。(私は後続の手順にあるモデルのデプロイを行ってしまったため、後戻りができず必死にブログを書いています。)
Subscribed になって入れば OK です。Amazon Bedrock のモデルサブスクライブと同じようなイメージを持っていただくと良いのではないかと思います。
モデルのデプロイ
それではモデルのデプロイを行います。(実際には事後ですが。)
先ほどのモデルカタログの画面から Deploy を行います。
Marketplce Deployments に遷移しモデルのデプロイ画面になりました。モデルのインスタンス数、インスタンスタイプが選択できるようになっていますね。
今回は以下を選択しました。
- インスタンス数:1
- インスタンスタイプ:ml.g6.48xlarge (recommended)
Advanced Settings として VPC Settings や IAM ロールの指定ができます。今回は No VPC の IAM ロールは自動でどのようなロールが作成されるか確認してみます。
確認して問題なければ Deploy をクリックします。これでインスタンスが立ち上がります。
モデルデプロイメントの画面で先ほど作成したモデルが出てきましたね。
数分待つとステータスが In Service に変わりました。
サービスロールの IAM ポリシーを確認します。
- アカウント ID が異なる AWS 所有のアカウントが 3 個ありクロスアカウントで資材を持ってきていました
- その他 SageMaker のログを保管するためのポリシーがついてますね
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::jumpstart-cache-prod-ap-northeast-1",
"arn:aws:s3:::jumpstart-cache-prod-ap-northeast-1/*"
],
"Condition": {
"StringEquals": {
"aws:ResourceAccount": "AWS_OWNED_ACCOUNT_ID_1"
}
}
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:CreateLogGroup",
"logs:DescribeLogStreams"
],
"Resource": [
"arn:aws:logs:ap-northeast-1:DEPLOYMRNT_ACCOUNT_ID:log-group:/aws/sagemaker/Endpoints/karakuri-lm-8x7b-instruct",
"arn:aws:logs:ap-northeast-1:DEPLOYMRNT_ACCOUNT_ID:log-group:/aws/sagemaker/Endpoints/karakuri-lm-8x7b-instruct:*"
]
},
{
"Effect": "Allow",
"Action": "cloudwatch:PutMetricData",
"Resource": "*",
"Condition": {
"StringEquals": {
"cloudwatch:Namespace": ["AWS/SageMaker", "/aws/sagemaker/Endpoints"]
}
}
},
{
"Effect": "Allow",
"Action": ["ecr:GetAuthorizationToken"],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
],
"Resource": "arn:aws:ecr:ap-northeast-1:*:repository/*",
"Condition": {
"StringEquals": {
"aws:ResourceAccount": [
"AWS_OWNED_ACCOUNT_ID_2",
"AWS_OWNED_ACCOUNT_ID_3"
]
}
}
}
]
}
プレイグランドで試してみる
サンプルを参考にプロンプトを投げてみました。
うまく動いています。 Input, Output ですがトークンによる課金はないため、 -
となっていますね。
モデルによっては Converse API にサポートしているようです。今回は KARAKURI LM 8x7b instruct
を利用したためサポートしていなかったですが、要チェックですね。
モデルのログですが InvokeModel で記録されていますね。
{
"schemaType": "ModelInvocationLog",
"schemaVersion": "1.0",
"timestamp": "2024-12-31T04:00:56Z",
"accountId": "123456789012",
"identity": {
"arn": "arn:aws:sts::123456789012:assumed-role/takakuni/takakuni"
},
"region": "ap-northeast-1",
"requestId": "1dd8d6b7-492e-4fd7-a582-833acfe668ee",
"operation": "InvokeModel",
"modelId": "arn:aws:sagemaker:ap-northeast-1:123456789012:endpoint/karakuri-lm-8x7b-instruct",
"input": {
"inputContentType": "application/json",
"inputBodyJson": {
"inputs": "<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>あなたは親切なアシスタントです。<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|USER_TOKEN|>良いお年を!<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|><attributes>helpfulness: 4 correctness: 4 coherence: 4 complexity: 4 verbosity: 4 quality: 4 toxicity: 0 humor: 0 creativity: 0</attributes>",
"parameters": {
"max_new_tokens": 256,
"stop": [],
"temperature": 1,
"top_p": 0.9,
"top_k": null
}
}
},
"output": {
"outputContentType": "application/json",
"outputBodyJson": {
"generated_text": "<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>あなたは親切なアシスタントです。<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|USER_TOKEN|>良いお年を!<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|><attributes>helpfulness: 4 correctness: 4 coherence: 4 complexity: 4 verbosity: 4 quality: 4 toxicity: 0 humor: 0 creativity: 0</attributes> あなたも、良いお年をお迎えください!もし何かお手伝いできることがあれば、遠慮なくご相談ください。"
}
}
}
リソース削除
最後にリソース削除です。モデルエンドポイントから対象モデルを選択し削除を行います。
削除は比較的数秒で終わりました。最近このワンちゃんが個人的に好みです。
念の為 SageMaker のエンドポイントも確認しましょう。削除されていますね。
エンドポイント設定やモデルも不要であれば削除しておきましょう。
参考
まとめ
以上、「Amazon Bedrock Marketplace でモデルをデプロイしてみた」でした。
執筆時点でカスタムモデルインポートが使えない東京リージョンで日本語 LLM がマネージドなインスタンスで動いているのは嬉しいですね。
このブログがどなたかの参考になれば幸いです。AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!